Java viene considerato un linguaggio di programmazione portable, nel senso che una generica applicazione Java può venire eseguita dalla maggior parte delle macchine. Mostriamo di seguito quali sono i motivi che hanno reso realizzabile questa sua peculiarità.
Fase di compilazione
Il codice sorgente di un’applicazione Java risiede in file con estensione .java
Ad esempio, un semplice programma di “hello world” potrebbe avere un codice sorgente salvato con il nome HelloWorld.java
Il file in figura rappresenta quindi il codice sorgente del programma e come tale non può essere eseguito da una macchina. A tale scopo invece, deve prima essere compilato.
Come evidenziato in figura, l’azione di compilazione ad opera del compilatore Java, genera un secondo file chiamato HelloWorld.class, con lo stesso nome dell’originale, ma con estensione diversa.
HelloWorld.class è l’applicazione vera e propria e come tale può essere eseguita da una macchina; vedremo come nel paragrafo successivo.
Mentre HelloWorld.java contiene le istruzioni Java scritte dal programmatore, aprendo il file HelloWorld.class con un editor di testo, vedremo una serie di simboli a noi incomprensibili.
HelloWorld.class contiene infatti istruzioni in bytecode, ovvero una versione “tradotta” del codice sorgente Java.
Il bytecode è il linguaggio interpretabile solo dalla JVM, ovvero la Java Virtual Machine.
Fase di interpetazione
La JVM, detta anche interprete Java, è la macchina virtuale Java che riesce a comprendere le istruzioni in bytecode del file HelloWorld.class e per questo, una volta intepretate, può eseguire l’applicazione.
La stessa applicazione HelloWorld.class può essere eseguita su qualsiasi macchina che abbia la JVM.
Si giunge così alla conclusione che Java è considerato un linguaggio di programmazione portable, in quanto la medesima applicazione Java, con estensione .class, è eseguibile su un qualsiasi sistema che contenga una JVM.